# js601_1_x_rule.py
import sys
from pathlib import Path

# 获取 template 目录的绝对路径（根据实际结构调整）
current_file = Path(__file__)
template_dir = current_file.parent.parent  # 上两级目录

sys.path.append(str(template_dir))

# 现在可以正常导入
from utils import date_offset_handler, generate_random_data_with_params
from base_rule import BaseRule
from DataProcessor import DataProcessor
import random
import pandas as pd

class JS601_1_Rule(BaseRule):
    def __init__(self, project_info):
        # ✅ 使用 lambda 包装 project_info
        super().__init__("JS601_1", project_info)

        # ✅ 统一通过 get_project_info_func() 获取上下文
        context = project_info
        instance_values = context.get("instance_values", {})

        # 桩号、部位
        self.add_field("桩号、部位", lambda _: context['施工部位'])

        # 日期字段
        self.add_field("施工日期", date_offset_handler(0), data_type="date", format="%Y年%m月%d日")
        self.add_field("检测、记录日期", date_offset_handler(0), data_type="date", format="%Y年%m月%d日")

        # 混凝土强度等级、用量字段
        self.add_field("混凝土强度（砂浆）等级", lambda _: instance_values.get('混凝土强度（砂浆）等级'))
        self.add_field("设计混凝土（砂浆）用量", lambda _: instance_values.get('设计混凝土（砂浆）用量'))
        self.add_field("实际混凝土（砂浆）用量", lambda _: instance_values.get('实际混凝土（砂浆）用量'))

        # 特有字段（仅“基础”有）
        self.add_field("拌和物塌落度", generate_random_data_with_params(
            frequency=3, range_param=[140, 180], as_string=True, decimal=0))

        # 签字日期字段
        self.add_field("质检负责人日期", date_offset_handler(0), data_type="date", format="%Y年%m月%d日")
        self.add_field("自检员日期", date_offset_handler(0), data_type="date", format="%Y年%m月%d日")

    def process(self, **kwargs):
        """
        封装处理逻辑，直接返回结果
        :param data_file_path: 数据文件路径（Excel/CSV）
        :return: 处理后的 DataFrame
        """
        data_file_path = current_file.parent / '模板数据.xlsx'
        df = pd.read_excel(data_file_path)
        rules = self.get_rules()

        # ✅ 使用 get_project_info_func()
        processor = DataProcessor(base_data=df, project_info=project_info, rules=rules)
        results = processor.process_dataframe(df)

        return results


if __name__ == "__main__":
    PROJECT_BASE_INFO = {
        '施工单位': '浙江交工宏途交通建设有限公司',
        '监理单位': '浙江浙中建设工程管理有限公司',
        '单位工程': '路基工程',
        '分部工程': '涵洞、通道',
        '分项工程': '主体结构',
        '施工日期': '2024/05/31',
        '施工部位': 'K59+639圆管涵',
        '设计坐标(X,Y)': (3243273.926, 509154.842),
        '长': 44.5,  # 圆管涵长度
        '宽': 4,  # 圆管涵宽度
        '基础宽度': 2759,
        '基础厚度': 300,
        '基础顶高程': 66035,
        '设计高程': 66,  # 基础高程
        '断面尺寸长度': 1250,
        '断面尺寸宽度（直径）': 275.9,
        '断面尺寸高（厚）度': 30,
        '混凝土强度（砂浆）等级': 'C25',
        '设计混凝土（砂浆）用量': '15',
        '实际混凝土（砂浆）用量': '16',
    }

    rule = JS601_1_Rule(PROJECT_BASE_INFO)
    results = rule.process()
    print(results)